#!/bin/bash

# Скрипт для создания локальных пользователей на серверах и маршрутизаторах

set -e # Завершить выполнение при ошибке

echo "=== Скрипт создания локальных пользователей ==="

# Проверка запуска от root
if [[ $EUID -ne 0 ]]; then
   echo "Ошибка: Этот скрипт должен быть запущен от пользователя root." >&2
   exit 1
fi

# --- Аргументы скрипта ---
# Ожидается тип устройства: "server" или "router"
DEVICE_TYPE="$1"

if [[ "$DEVICE_TYPE" != "server" ]] && [[ "$DEVICE_TYPE" != "router" ]]; then
    echo "Использование: $0 <server|router>"
    echo "  server: Создает пользователя sshuser для серверов (HQ-SRV, BR-SRV)"
    echo "  router: Создает пользователя net_admin для маршрутизаторов (HQ-RTR, BR-RTR)"
    exit 1
fi

# --- Настройки для серверов ---
if [[ "$DEVICE_TYPE" == "server" ]]; then
    USER_NAME="sshuser"
    USER_ID="1010"
    PASSWORD="P@ssw0rd" # ВНИМАНИЕ: Хранить пароль в открытом виде небезопасно!
    SUDO_RULE="sshuser ALL=(ALL)NOPASSWD: ALL"
    echo "Настройка для типа устройства: SERVER (создание $USER_NAME)"

    # Проверка, существует ли пользователь
    if id "$USER_NAME" &>/dev/null; then
        echo "Пользователь $USER_NAME уже существует."
        read -p "Вы хотите пересоздать его? (y/N): " -n 1 -r RECREATE_USER
        echo
        if [[ $RECREATE_USER =~ ^[Yy]$ ]]; then
            echo "Удаление существующего пользователя $USER_NAME..."
            userdel -r "$USER_NAME" # Удалить пользователя и домашнюю директорию
        else
            echo "Пропуск создания пользователя $USER_NAME."
        fi
    fi

    # Создание пользователя, если он не существует или был удален
    if ! id "$USER_NAME" &>/dev/null; then
        echo "Создание пользователя $USER_NAME с UID $USER_ID..."        useradd -u "$USER_ID" "$USER_NAME"
        echo "Пользователь $USER_NAME создан."
    fi

    # Установка пароля
    echo "Установка пароля для $USER_NAME..."
    echo "$USER_NAME:$PASSWORD" | chpasswd
    echo "Пароль установлен."

    # Добавление права sudo без пароля
    SUDOERS_FILE="/etc/sudoers.d/user-$USER_NAME-permissions" # Лучше создать отдельный файл
    echo "Добавление разрешений sudo для $USER_NAME в $SUDOERS_FILE..."
    # Проверяем, существует ли уже правило в основном файле или в подкаталоге
    if grep -Fxq "$SUDO_RULE" /etc/sudoers || [[ -f "$SUDOERS_FILE" ]] && grep -Fxq "$SUDO_RULE" "$SUDOERS_FILE"; then
         echo "Правило sudo для $USER_NAME уже существует."
    else
        # echo "$SUDO_RULE" >> /etc/sudoers # Не рекомендуется редактировать /etc/sudoers напрямую
        echo "$SUDO_RULE" > "$SUDOERS_FILE"
        chmod 440 "$SUDOERS_FILE" # Устанавливаем безопасные права доступа
        echo "Разрешения sudo добавлены в $SUDOERS_FILE."
    fi

    echo "Настройка для сервера завершена."
fi

# --- Настройки для маршрутизаторов ---
if [[ "$DEVICE_TYPE" == "router" ]]; then
    USER_NAME="net_admin"
    # USER_ID не указан в инструкции для маршрутизаторов, поэтому не используем
    PASSWORD="P@$$w0rd" # ВНИМАНИЕ: Хранить пароль в открытом виде небезопасно!
    SUDO_RULE="net_admin ALL=(ALL)NOPASSWD: ALL"
    echo "Настройка для типа устройства: ROUTER (создание $USER_NAME)"

    # Проверка, существует ли пользователь
    if id "$USER_NAME" &>/dev/null; then
        echo "Пользователь $USER_NAME уже существует."
        read -p "Вы хотите пересоздать его? (y/N): " -n 1 -r RECREATE_USER
        echo
        if [[ $RECREATE_USER =~ ^[Yy]$ ]]; then
            echo "Удаление существующего пользователя $USER_NAME..."
            userdel -r "$USER_NAME"
        else
            echo "Пропуск создания пользователя $USER_NAME."
        fi
    fi

    # Создание пользователя, если он не существует или был удален
    if ! id "$USER_NAME" &>/dev/null; then
        echo "Создание пользователя $USER_NAME..."
        useradd "$USER_NAME" # Не указываем UID        echo "Пользователь $USER_NAME создан."
    fi
# Установка пароля
    echo "Установка пароля для $USER_NAME..."
    echo "$USER_NAME:$PASSWORD" | chpasswd
    echo "Пароль установлен."

    # Добавление права sudo без пароля
    SUDOERS_FILE="/etc/sudoers.d/user-$USER_NAME-permissions" # Лучше создать отдельный файл
    echo "Добавление разрешений sudo для $USER_NAME в $SUDOERS_FILE..."
    # Проверяем, существует ли уже правило
    if grep -Fxq "$SUDO_RULE" /etc/sudoers || [[ -f "$SUDOERS_FILE" ]] && grep -Fxq "$SUDO_RULE" "$SUDOERS_FILE"; then
         echo "Правило sudo для $USER_NAME уже существует."
    else
        # echo "$SUDO_RULE" >> /etc/sudoers # Не рекомендуется редактировать /etc/sudoers напрямую
        echo "$SUDO_RULE" > "$SUDOERS_FILE"
        chmod 440 "$SUDOERS_FILE"
        echo "Разрешения sudo добавлены в $SUDOERS_FILE."
    fi

    echo "Настройка для маршрутизатора завершена."
fi

echo "=== Скрипт завершен ==="